package com.adapter.demo04;

/**
 * 对象的适配器模式:"指方为圆"-指定一个正方体,返回该正方体的内切球
 * Magic类实现了 BallIF接口,并同时扩展了 Cube类.由于 Cube类并没有作为BallIF所要求的方法,因此Magic类提供了默认的方法.这样Magic可以替代
 * BallIF,但同时又具有从Cube类继承而来的功能.
 * 显然,本例子里使用的是对象的适配器模式.这样做的好处是,如果一旦决定不仅要支持正方体,而且要支持长方体,是可以使用同一个Magic类,
 * 而不必针对每一个四面体(长方体和立方体)都建立一个Magic类.
 */
public class Magic implements BallIF{
    private Cube adaptee;
    private double radius =0;
    private static final double PI = 3.14;

    public Magic(Cube adaptee){
        this.adaptee = adaptee;
        this.radius = adaptee.getWidth();
    }

    @Override
    public double calculateArea() {
        return 4 * PI * radius * radius;
    }

    @Override
    public double calculateVolume() {
        return 4/3 * PI * radius * radius * radius;
    }

    @Override
    public double getRadius() {
        return this.radius;
    }

    @Override
    public void setRadius(double radius){
        this.radius = radius;
    }
}
